{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# DeepPurpose Deep Dive\n",
    "## Tutorial 2: Training a Drug Property Prediction Model from Scratch for Assay Data\n",
    "#### [@KexinHuang5](https://twitter.com/KexinHuang5)\n",
    "\n",
    "In this tutorial, we further extends the use cases of DeepPurpose to assay data where there are only drug information and its affinity score to the protein in the assay. \n",
    "\n",
    "Agenda:\n",
    "\n",
    "- Part I: Introduction to Assay Data\n",
    "- Part II: Drug Property Prediction\n",
    "\n",
    "Let's start!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "RDKit WARNING: [00:01:20] Enabling RDKit 2019.09.3 jupyter extensions\n"
     ]
    }
   ],
   "source": [
    "from DeepPurpose import utils, models, dataset, property_pred\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Part I: Introduction to Assay Data\n",
    "\n",
    "Drug-target interaction measures the binding of drug molecules to the protein targets. In drug discovery process, we usually already have a protein of interest and traditionally, high-throughput screening assay is performed on a potential drug library to get affinity scores. But it is expensive and time-consuming, and it cannot go through a huge amount of molecule candidates, which means it potentially can miss a drug candidate. Machine learning can provide an important role to facilitate this process. One way to do it is to narrow down the search space for HTS. Here are the steps:\n",
    "\n",
    "1. For a target protein of interest, conduct an initial high-throughput screening assay on a set of drugs (ideally, structurally diverse), where the set size depends on the time and cost constraint.\n",
    "\n",
    "2. Train a deep learning model using DeepPurpose and select a threshold to control the false positive rate (e.g., < 0.02).\n",
    "\n",
    "3. Apply the trained model on a large set of drugs. Select the set of drugs that meet the threshold and send to HTS.\n",
    "\n",
    "Through the above three steps, it greatly cuts down the time of screening and also reduces the likelihood of missing a potential drug candidate. Now, we show the step 2: using DeepPurpose to train a deep learning model for screening the assay. \n",
    "\n",
    "(**Data**) DeepPurpose takes into an array of drug's SMILES strings (**d**) and an array of label (**y**), which can either be binary 0/1 indicating interaction outcome or a real number indicating affinity value. Note **y**\\[0\\] is the score for **d**\\[0\\].\n",
    "\n",
    "Besides transforming into numpy arrays through some data wrangling on your own, DeepPurpose also provides two ways to help data preparation. \n",
    "\n",
    "The first way is to read from local files. For example, to load drug assay data, we expect a file.txt where each line is a drug SMILES string, followed by an affinity score or 0/1 label:\n",
    "\n",
    "```CC1=C...C4)N  7.365```\n",
    "\n",
    "Then, we use ```dataset.read_file_training_dataset_bioassay``` to load it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug 1: CCOC1=CC=C(C=C1)N2C=CC(=O)C(=N2)C(=O)NC3=CC=C(C=C3)S(=O)(=O)NC4=NC=CC=N4\n",
      "Score 1: 0.0\n"
     ]
    }
   ],
   "source": [
    "X_drugs, X_targets, y = dataset.read_file_training_dataset_bioassay('./toy_data/AID1706.txt')\n",
    "print('Drug 1: ' + X_drugs[0])\n",
    "print('Score 1: ' + str(y[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "DeepPurpose also provides data loaders to ease preprocessing. For example, in this tutorial, we will use the AID1706 screening data for SARS-CoV 3CL Protease. We can use ```dataset.load_AID1706_SARS_CoV_3CL```. It will download, preprocess to the designated data format. It supports label log-scale transformation for easier regression and also allows label binarization given a customized threshold. In this case, we use the binary label."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Beginning Processing...\n",
      "Default binary threshold for the binding affinity scores is 15, recommended by the investigator\n",
      "Done!\n",
      "Drug 1: COC1=CC=CC2=C1OC(=O)C(=C2)C(=O)NCC3=CC=CC=C3Br\n",
      "Score 1: 0\n"
     ]
    }
   ],
   "source": [
    "X_drugs, X_targets, y = dataset.load_AID1706_SARS_CoV_3CL(path = './data', binary = True, threshold = 15, balanced = True)\n",
    "print('Drug 1: ' + X_drugs[0])\n",
    "print('Score 1: ' + str(y[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For more detailed examples and tutorials of data loading, checkout this [tutorial](./DEMO/load_data_tutorial.ipynb).\n",
    "\n",
    "## Part II: Drug Property Prediction Framework\n",
    "\n",
    "DeepPurpose provides a simple framework to do drug property prediction research using 8 encoders for drugs. It basically consists of the following steps, where each step corresponds to one line of code:\n",
    "\n",
    "- Encoder specification\n",
    "- Data encoding and split\n",
    "- Model configuration generation\n",
    "- Model initialization\n",
    "- Model Training\n",
    "- Model Prediction and Repuposing/Screening\n",
    "- Model Saving and Loading\n",
    "\n",
    "Let's start with data encoding! \n",
    "\n",
    "(**Encoder specification**) After we obtain the required data format from Part I, we need to prepare them for the encoders. Hence, we first specify the encoder to use for drug and protein. Here we try MPNN for drug.\n",
    "\n",
    "If you find MPNN is too large for the CPUs, you can try smaller encoders by uncommenting the last line:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "drug_encoding = 'MPNN'\n",
    "#drug_encoding = 'Morgan'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that you can switch encoder just by changing the encoding name above. The full list of encoders are listed [here](https://github.com/kexinhuang12345/DeepPurpose#encodings). \n",
    "\n",
    "(**Data encoding and split**) Now, we encode the data into the specified format, using ```utils.data_process``` function. It specifies train/validation/test split fractions, and random seed to ensure same data splits for reproducibility. This function also support data splitting methods such as ```cold_drug```, which splits on drug for model robustness evaluation to test on unseen drug/proteins.\n",
    "\n",
    "The function outputs train, val, test pandas dataframes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug Property Prediction Mode...\n",
      "in total: 26640 drugs\n",
      "encoding drug...\n",
      "unique drugs: 13764\n",
      "drug encoding finished...\n",
      "Done.\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>SMILES</th>\n",
       "      <th>Label</th>\n",
       "      <th>drug_encoding</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>CC1=NC2=C(S1)N(C3=C2C=C(C=C3)Cl)CCN4CCOCC4</td>\n",
       "      <td>0</td>\n",
       "      <td>[[[tensor(1.), tensor(0.), tensor(0.), tensor(...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                       SMILES  Label  \\\n",
       "0  CC1=NC2=C(S1)N(C3=C2C=C(C=C3)Cl)CCN4CCOCC4      0   \n",
       "\n",
       "                                       drug_encoding  \n",
       "0  [[[tensor(1.), tensor(0.), tensor(0.), tensor(...  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train, val, test = utils.data_process(X_drug = X_drugs, y = y, drug_encoding = drug_encoding,\n",
    "                                split_method='random',frac=[0.7,0.1,0.2],\n",
    "                                random_seed = 1)\n",
    "train.head(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(**Model configuration generation**) Now, we initialize a model with its configuration. You can modify almost any hyper-parameters (e.g., learning rate, epoch, batch size), model parameters (e.g. hidden dimensions, filter size) and etc in this function. The supported configurations are listed here in this [link](https://github.com/kexinhuang12345/DeepPurpose/blob/e169e2f550694145077bb2af95a4031abe400a77/DeepPurpose/utils.py#L486).\n",
    "\n",
    "For the sake of example, we specify the epoch size to be 3, and set the model parameters to be small so that you can run on both CPUs & GPUs quickly and can proceed to the next steps. For a reference parameters, checkout the notebooks in the DEMO folder."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "config = utils.generate_config(drug_encoding = drug_encoding, \n",
    "                         cls_hidden_dims = [1024,1024,512], \n",
    "                         train_epoch = 5, \n",
    "                         LR = 0.001, \n",
    "                         batch_size = 128,\n",
    "                         hidden_dim_drug = 128,\n",
    "                         mpnn_hidden_size = 128,\n",
    "                         mpnn_depth = 3\n",
    "                        )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(**Model initialization**) Next, we initialize a model using the above configuration."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<DeepPurpose.property_pred.Property_Prediction at 0x7fa70ed6d550>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = property_pred.model_initialize(**config)\n",
    "model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(**Model Training**) Next, it is ready to train, using the ```model.train``` function! If you do not have test set, you can just use ```model.train(train, val)```. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Let's use 1 GPU!\n",
      "--- Data Preparation ---\n",
      "--- Go for Training ---\n",
      "Training at Epoch 1 iteration 0 with loss 0.69342. Total time 0.0 hours\n",
      "Training at Epoch 1 iteration 100 with loss 0.66905. Total time 0.00638 hours\n",
      "Validation at Epoch 1 , AUROC: 0.73941 , AUPRC: 0.73430 , F1: 0.65\n",
      "Training at Epoch 2 iteration 0 with loss 0.64731. Total time 0.01 hours\n",
      "Training at Epoch 2 iteration 100 with loss 0.54385. Total time 0.01611 hours\n",
      "Validation at Epoch 2 , AUROC: 0.83196 , AUPRC: 0.83827 , F1: 0.33049\n",
      "Training at Epoch 3 iteration 0 with loss 0.64983. Total time 0.01972 hours\n",
      "Training at Epoch 3 iteration 100 with loss 0.42492. Total time 0.02611 hours\n",
      "Validation at Epoch 3 , AUROC: 0.87938 , AUPRC: 0.87592 , F1: 0.80997\n",
      "Training at Epoch 4 iteration 0 with loss 0.36398. Total time 0.02972 hours\n",
      "Training at Epoch 4 iteration 100 with loss 0.31953. Total time 0.03611 hours\n",
      "Validation at Epoch 4 , AUROC: 0.91745 , AUPRC: 0.90816 , F1: 0.84622\n",
      "Training at Epoch 5 iteration 0 with loss 0.33343. Total time 0.03972 hours\n",
      "Training at Epoch 5 iteration 100 with loss 0.21458. Total time 0.04583 hours\n",
      "Validation at Epoch 5 , AUROC: 0.95406 , AUPRC: 0.94003 , F1: 0.89561\n",
      "--- Go for Testing ---\n",
      "Testing AUROC: 0.9550845321335961 , AUPRC: 0.9388383008711587 , F1: 0.8995714551891187\n",
      "--- Training Finished ---\n"
     ]
    },
    {
     "data": {
      "image/png": "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5s6dS//+/UlOTj6tTEpKCnfccQdTp07l999/p3r16nzwwQcAHDp0iP79+zNjxgzWrFnDtGnTAIiKiqJdu3Z8+umnQXkfBaKqKhAWLtxC//6zmTSpK61bVwdg1KgOIY7KmKzVeHxWQNa79eUuWZbp1KkTs2bN4sYbb+STTz6hZ8+efP/992eUq1ChArVq1eKvv/4CoGvXrixevJj169dTr96ZbYaPPvooL730Ev/5z38y3PaRI0dYvXo1F1xwAQBLly5lwIABnDhxgiJFivD+++9Tr149Jk+ezKxZs4iPj+fYsWN8++23vPrqq3z22WckJCRw/fXX89xzzwFw3XXXsX37duLj43n44Yfp27evp32VkS+//JIePXoQHR1NzZo1qV27NkuXLqVly5ZpZfbv3090dDR169YF4Oqrr2bEiBH06dOHjz/+mO7du1OtWrW0/ZjquuuuY+jQodx6661nFaMXdsaRzp49x7jjji+48soprFu3j1Gjfg51SMbkGz169GDq1KnEx8ezevVqLrnkEr/lNm/ezObNm6lduzYAYWFhPPbYY7z00kt+y990002sXLmSTZsy7rpn+fLlNGp0qoeG+vXrs3jxYn799Veef/55nnjiibRlP//8Mx988AHffvstX3/9NRs3bmTp0qWsWrWKFStWsHjxYgDee+89VqxYwfLlyxkzZgz79+8/Y7sDBw6kadOmZzxefvnlM8ru2LGDqlWrpk1XqVKFHTt2nFamXLlyJCYmsnz5csCpmtu+fTsAGzZs4ODBg7Rt25aLL76YKVOmpL2uUaNGLFu2LMP9k5vsjMOVkqK8++5KhgxZwMGD8URHh/PUU60ZPPjSUIdmTLZ4OTMIlCZNmrB161Y++eQTOnfufMbyTz/9lB9++IHo6GgmTZpEmTJl0pbdcsstDB8+nC1btpzxuvDwcAYPHsyIESPo1KmT323v3LmT8uVPXWEZFxfHHXfcwcaNGxEREhMT05ZdffXVadv++uuv+frrr7nwwgsBOHr0KBs3bqR169aMGTOGzz//HIDt27ezceNGypYte9p2R48e7XX3oKpnzEt/1ZOIMHXqVAYOHEhCQgLt27cnIsI5VCclJbFixQq++eYbTpw4QcuWLWnRogV169YlPDycqKgojhw5QokSJTzHlBOWOIAtWw5y222f89NPTlZv374W48Z1pnbtMlm80hiT3rXXXsujjz7KokWLzviFfvPNNzN27Fi/r4uIiOCRRx5h5MiRfpf36tWLESNGcP755/tdXqRIkdPuVxg2bBhXXHEFn3/+OVu3bqVt27Zpy4oVK5b2XFUZOnQo995772nrW7RoEQsWLODnn3+maNGitG3b1u/9EAMHDmThwoVnzO/RowePP/74afOqVKmSdvYAzo2b55133hmvbdmyZVoV39dff82GDRvSXl+uXDmKFStGsWLFaN26Nb/99ltatVZCQgIxMTF+909usqoq4JxzotmwYT/nnlucqVNvYO7cWy1pGJNDd911F08//TSNGzfO9mt79+7NggUL2Lt37xnLIiMjGThwIG+88Ybf1zZo0OC0qqy4uLi0xvnJkydnuM0OHTrw3nvvcfToUcCpTtqzZw9xcXGULl2aokWLsm7dOpYsWeL39aNHj2bVqlVnPNInDXCS6tSpU0lISGDLli1s3LiR5s3PvJ1gz549gJMIRo4cSb9+/QDo1q0b33//PUlJSRw/fpxffvmFBg0aAE7bSPny5XO1a5GMFNrEMW/eJhISnCsqypYtyowZPVi37n5uvrmR3UhlzFmoUqUKDz/8cI5eGxUVxUMPPZR24EyvT58+GV4JVb9+feLi4jhy5AgAjz32GEOHDqVVq1ZnXLnkq3379txyyy20bNmSxo0bc+ONN3LkyBE6duxIUlISTZo0YdiwYbRo0SJH78nX+eefz0033UTDhg3p2LEj48aNIzw8HIDOnTvz999/A/Dqq6/SoEEDmjRpwjXXXMOVV14JOMmxY8eONGnShObNm3P33XentessXLjQb/VgIIi/Orf8JLpSHU3YudFz+e3b43joobl88cU6XnjhCp56qnUAozMmOP7444+0X56F2ejRoylRokSev5cjELp3786IESP8XpXm7/MhIitUtVlOtlVozjiSklIYNepnGjQYxxdfrKN48SjKlLHuzo0pSO677z6io6NDHUbQnTx5kuuuu85v0giEQtE4vmRJLP36zeS335ybjW64oQFvvtmRypXPCXFkxpjcFBMTc9rd64VFVFQUt99+e9C2V+ATxy+/xHLppe+iCjVqlGLs2E506VI31GEZk+tU1drnzBkC0RxR4BNH8+aV6dChNhdeeC5PPdWaokUDf8WBMcEWExPD/v37rWt1c5rU8Thy+xLdAtc4vnHjfgYO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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.train(train, val, test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that the model will automatically generate and plot the training process, along with the validation result and test result.\n",
    "\n",
    "(**Model Prediction and Repuposing/Screening**) Next, we see how we can predict affinity scores on new data. Suppose the new data is a new drug below."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drug Property Prediction Mode...\n",
      "in total: 1 drugs\n",
      "encoding drug...\n",
      "unique drugs: 1\n",
      "drug encoding finished...\n",
      "do not do train/test split on the data for already splitted data\n",
      "predicting...\n",
      "The predicted score is [0.009828050620853901]\n"
     ]
    }
   ],
   "source": [
    "X_drug = ['CC1=C2C=C(C=CC2=NN1)C3=CC(=CN=C3)OCC(CC4=CC=CC=C4)N']\n",
    "X_pred = utils.data_process(X_drug = X_drug, y = y, drug_encoding = drug_encoding, split_method='no_split')\n",
    "y_pred = model.predict(X_pred)\n",
    "print('The predicted score is ' + str(y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also do repurposing/screening using the trained model. Basically, for repurposing/screening a set of new drugs (**r**), we run the above prediction function. We wrap the operation into a ```models.repurpose```.\n",
    "\n",
    "For example, suppose we want to do repurposing from a set of antiviral drugs for the COVID-19 target 3CL protease. The corresponding data can be retrieved using ```dataset``` functions.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Repurposing Drug 1 Name: Abacavir\n",
      "Repurposing Drug 1 SMILES: C1CC1NC2=C3C(=NC(=N2)N)N(C=N3)C4CC(C=C4)CO\n",
      "Repurposing Drug 1 Pubchem CID: 441300\n"
     ]
    }
   ],
   "source": [
    "r, r_name, r_pubchem_cid = dataset.load_antiviral_drugs()\n",
    "print('Repurposing Drug 1 Name: ' + r_name[0])\n",
    "print('Repurposing Drug 1 SMILES: ' + r[0])\n",
    "print('Repurposing Drug 1 Pubchem CID: ' + str(r_pubchem_cid[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we can call the ```repurpose``` function. After feeding the necessary inputs, it will print a list of repurposed drugs ranked on its affinity to the target protein. The ```convert_y``` parameter should be set to be ```False``` when the ranking is ascending (i.e. lower value -> higher affinity) due to the log transformation, vice versus."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "repurposing...\n",
      "Drug Property Prediction Mode...\n",
      "in total: 82 drugs\n",
      "encoding drug...\n",
      "unique drugs: 81\n",
      "drug encoding finished...\n",
      "Done.\n",
      "predicting...\n",
      "---------------\n",
      "Drug Repurposing Result\n",
      "+------+----------------------+-------------+-------------+\n",
      "| Rank |      Drug Name       | Interaction | Probability |\n",
      "+------+----------------------+-------------+-------------+\n",
      "|  1   |       Loviride       |     YES     |     0.92    |\n",
      "|  2   |      Efavirenz       |     YES     |     0.84    |\n",
      "|  3   |     Nitazoxanide     |     YES     |     0.80    |\n",
      "|  4   |      Letermovir      |     YES     |     0.73    |\n",
      "|  5   |      Imiquimod       |     YES     |     0.55    |\n",
      "|  6   |     Famciclovir      |      NO     |     0.34    |\n",
      "|  7   |      Darunavir       |      NO     |     0.14    |\n",
      "|  8   |     Elvitegravir     |      NO     |     0.08    |\n",
      "|  9   |      Doravirine      |      NO     |     0.06    |\n",
      "|  10  |   Podophyllotoxin    |      NO     |     0.05    |\n",
      "checkout ./result/repurposing.txt for the whole list\n"
     ]
    }
   ],
   "source": [
    "y_pred = property_pred.repurpose(X_repurpose = r, model = model, drug_names = r_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Saving and loading models are also really easy. The loading function also automatically detects if the model is trained on multiple GPUs. To save a model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.save_model('./tutorial_model')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To load a saved/pretrained model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<DeepPurpose.property_pred.Property_Prediction at 0x7fa70aa08bd0>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = property_pred.model_pretrained(path_dir = './tutorial_model')\n",
    "model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We also provided more functionalities for DTI research purposes. \n",
    "\n",
    "For example, this [demo](https://github.com/kexinhuang12345/DeepPurpose/blob/master/DEMO/Drug_Property_Pred-Ax-Hyperparam-Tune.ipynb) shows how to use Ax platform to do some latest hyperparameter tuning methods such as Bayesian Optimization on DeepPurpose.\n",
    "\n",
    "They are described in details in tutorial 1 and in the github repository."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "That wraps up our tutorials on the main functionalities of DeepPurpose's Drug Property Prediction framework! \n",
    "\n",
    "Do checkout the previous & upcoming tutorials:\n",
    "\n",
    "Tutorial 1: Training a Drug-Target Interaction Model from Scratch\n",
    "\n",
    "Tutorial 3: Repurposing and Virtual Screening Using One Line of Code\n",
    "\n",
    "**Star & watch & contribute to DeepPurpose's [github repository](https://github.com/kexinhuang12345/DeepPurpose)!**\n",
    "\n",
    "Feedbacks would also be appreciated and you can send me an email (kexinhuang@hsph.harvard.edu)!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
